Data movement is an important "core" function of systems, incorporated into many standard, regularly-used system operations such as messaging, data copying or clearing memory to zero. Data movement in systems typically involves three general steps. First, memory is allocated to enable the movement of the data. Second, the data movement itself is performed. Third, the system notifies appropriate components, such as processors or processor agents, that the data movement has completed successfully and processing can continue based on the new location of the data.
In systems of the current art, the first and third steps (memory allocation and notification) are typically performed by software, while the second step (data movement) is performed by hardware. The data movement hardware typically includes a message/copy state machine, an expensive hardware component whose operations are pivotal to enabling the data movement.
The software operations for the first and third steps of data movement (memory allocation and notification) inevitably require several machine cycles to complete. The software is typically found in microkernels loaded onto memory nodes that are local to the processor issuing the request requiring a data movement operation. It would thus be highly advantageous to be able to perform these first and third steps on hardware, obviating the need to refer to microkernel software, thereby speeding up the processing time to execute a data movement operation.
It would be even more advantageous if resources (such as registers) in the message/copy state machine could assist in performing these first and third data movement steps (memory allocation and notification), since the message/copy state machine is required anyway to perform the second (data movement) step. Not only would processing efficiency be optimized by replacing software operations with hardware operations, but the resources of the message/copy state machine (an expensive hardware component) would also be leveraged better. Additionally, efficiency-enhancing features such as data translation on the fly (in applications such as translation from virtual to physical memory), and pipelining of overlapping operations would be facilitated, being more easily enabled in a hardware environment than in a software environment.